import java.io.*;
import java.awt.*;

public
class ChatClientThread extends Thread{
	BufferedReader in;
	boolean stopped;
	ChatClient chatClient;
	List list;
	String nick = null;
	public ChatClientThread(ChatClient chatClient){
		super();
		this.in = chatClient.brSocket;
		this.chatClient = chatClient;
		this.list = chatClient.lNicks;
		stopped = false;
	}
	public void run(){
		String line = null;
		while(!stopped){
			try{
				line = in.readLine();
			}
			catch(IOException e){
				//chatClient.insertText("IO error: " + e + "\n");
				chatClient.clientThreadStopped();
				return;
			}
			processMessage(line);
		}
		chatClient.clientThreadStopped();
	}
	public void processMessage(String line)
	{
		if (line.length() < 5){
			insertText(line + "\n");
			return;
		}
		String command = line.substring(0, 5);
		if (command.equals("/quit")){
			stopped = true;
			//chatClient.clientThreadStopped();
		}
		else if (command.equals("/nick")){
			if (line.length() < 7){
				insertText("Bad server response!");
				return;
			}
			String nick = line.substring(6, line.length());
			if (!nickExists(nick)){
				list.add(nick);
			}
		}
		else if(command.equals("/nonk")){
insertText("Please specify your nick! (Use \"/nick\" command)\n");
		}
		else if(command.equals("/nkex")){
insertText("The nick is used by another user. Please specify another.\n");
			nick = null;
		}
		else if(command.equals("/nkok")){
			insertText("Nick OK! Enjoy!\n");
		}
		else if (command.equals("/nkrm")){
			if (line.length() < 7){
				insertText("Bad server command!");
				return;
			}
			String nick = line.substring(6, line.length());
			System.out.println("Remove nick: " + nick);
			if (nickExists(nick)){
				list.remove(nick);
			}
		}
		else{
			insertText(line + "\n");
		}
	}
	public boolean nickExists(String nick){
		for (int i = 0; i < list.getItemCount(); i++){
			if (list.getItem(i).equals(nick)){
				return true;
			}
		}
		return false;
	}
	public void insertText(String line)
	{
		chatClient.insertText(line);
	}
}
